package main

import (
	"encoding/json"
	"fmt"
)

// Student 学生
type Student struct {
	ID     int    `json:"id"` //通过指定tag实现json序列化该字段时的key
	Gender string //json序列化是默认使用字段名作为key
	name   string //私有不能被json包访问
}

/*
Tag  是结构体的元信息，可以运行的时候通过反射机制读取出来。
Tag  在结构体字段的后方定义，由一对反引号包裹起来，具体格式如下：
`key1:"value1" key2:"value2"`
结构体标签由一个或多个键值对组成，键与值使用冒号分隔，使用双引号。键值对之间使用一个空格分隔。
注意事项：为结构体编写Tag 时，必须严格遵循键值对的规则。结构体标签的接卸代码的容错能力很差，
一旦格式写错，编译和运行时搜不会提示任何错误信息，通过反射也无法正确获取值。例如不要在key 和 value 之间添加空格。


*/

func main() {
	s1 := Student{
		ID:     1,
		Gender: "女",
		name:   "pprof",
	}
	data, err := json.Marshal(s1)
	if err != nil {
		fmt.Println("json marshal failed!")
		return
	}
	fmt.Printf("json str:%s\n", data)
}
